package controller.packaging;

import java.sql.SQLException;

import service.CoffeeService;
import to.JobTO;
import util.CoffeeUtil;

//용기포장
public class BottlePackage extends Thread {
	private static CoffeeService service;

	public BottlePackage(CoffeeService service) {
		this.service = service;
	}

	@Override
	public void run() {
		// 대기 작업 레시피와 남은 작업량 조회
		// DB에 남은 작업량이 있는만큼
		while (true) {
			// 작업중 레시피체크
			// 레시피가 바뀔경우 청소
			try {
//				System.out.println("용기포장");
				
				int waitingJob = service.selectMachineWaitingJob("용기포장기");
				String recipe = service.selectMachinePrograssRecipe("용기포장기");
				if(waitingJob < 200 && service.selectMachineWaitingJob("글라인더") == 0 && service.selectSiloBeansTotalWeight("배전두silo") > 100){
					service.updateMachineWaitingJob("글라인더", 1);
				}
				//				System.out.println("용기포장 job = "+waitingJob);
				while (waitingJob >= 10) {// DB에서 작업량과 레시피를 가져온다.
					
					System.out.println("용기포장 job = "+waitingJob);
					service.updateMachineStatus("용기포장기", "포장중");
					String sTime = CoffeeUtil.getNow();
					CoffeeUtil.sleep(CoffeeUtil.BOTTLE_PACKAGING_TIME);
					String eTime = CoffeeUtil.getNow();
					JobTO jto = new JobTO("용기포장", sTime, eTime);
					int defective = (int) ((Math.random() * 1000) + 1);
					if (defective < CoffeeUtil.FRACTION_DEFECTIVE) {
						// 완성품 9,결함 1
						// DB에 카운팅 완성,결함
						jto.setArticleType(recipe);
						jto.setWorkLoad(9);
						jto.setFault("불량");
						service.insertJobByArticleTypeFaultInfo(jto);
						service.updateMaterialTotalWeight("용기포장", 9);
						service.updateMaterialTotalWeight("용기포장불량", 1);
						service.updateMachineWaitingJob("용기포장기", -10);
					} else {
						// 작업량 -1, 완성품 +10
						// DB에 카운팅 완성,결함
						jto.setArticleType(recipe);
						jto.setWorkLoad(10);
						jto.setFault("양호");
						service.insertJobByArticleTypeFaultInfo(jto);
						service.updateMaterialTotalWeight("용기포장", 10);
						service.updateMachineWaitingJob("용기포장기", -10);
						
					}
					// 작업 - 대기
					service.updateMachineStatus("용기포장기", "대기중");
					waitingJob = service.selectMachineWaitingJob("용기포장기");
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

	public void clean() {
		try {
			service.updateMachineStatus("용기포장기", "청소중");
			CoffeeUtil.sleep(CoffeeUtil.BOTTLE_PACKAGE_CLEAN_TIME);
			service.updateMachineStatus("용기포장기", "대기중");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
